home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1999 / MacHack 1999.toast / The Hacks / MACtive Desktop / Source / Sources / BaseMenuManager.cc < prev    next >
Encoding:
C/C++ Source or Header  |  1997-10-11  |  2.7 KB  |  198 lines  |  [TEXT/CWIE]

  1. #include "Window.h"
  2. #include "WindowManager.h"
  3. #include "BaseMenuManager.h"
  4.  
  5.  
  6.  
  7.  
  8.  
  9. extern WindowManager                        *gWindowManager;
  10.  
  11.  
  12.  
  13.  
  14.  
  15. void BaseMenuManager::DoAddMenu(Menu *menu)
  16. {
  17.     HandleAddMenu(menu);
  18. }
  19.  
  20.  
  21.  
  22.  
  23.  
  24. void BaseMenuManager::DoMenuUpdates(void)
  25. {
  26.     BaseMenuObject    *mobj;
  27.     Window            *win;
  28.     Boolean            redraw;
  29.     
  30.     
  31.     mobj = fMenuList.GetFirst();
  32.     while(mobj != NULL)
  33.     {
  34.         HandleMenuUpdate(mobj->fMenuObject);
  35.         mobj = mobj->next;
  36.     }
  37.     
  38.     redraw = false;
  39.     win = gWindowManager->DoGetFrontWindow();
  40.     if (win && ((win->fFlags & (kDialog | kModal)) == (kDialog | kModal)))
  41.     {
  42.         // Enable Moveable Modal Dialog state
  43.         mobj = fMenuList.GetFirst();
  44.         while(mobj != NULL)
  45.         {
  46.             if (mobj->fMenuObject->DoSetDisableState(true))
  47.                 redraw = true;
  48.             
  49.             mobj = mobj->next;
  50.         }
  51.     }
  52.     else
  53.     {
  54.         // Disable Moveable Modal Dialog state
  55.         mobj = fMenuList.GetFirst();
  56.         while(mobj != NULL)
  57.         {
  58.             if (mobj->fMenuObject->DoSetDisableState(false))
  59.                 redraw = true;
  60.             
  61.             mobj = mobj->next;
  62.         }
  63.     }
  64.     
  65.     if (redraw)
  66.         ::DrawMenuBar();
  67. }
  68.  
  69.  
  70.  
  71.  
  72.  
  73. void BaseMenuManager::DoSelect(UInt32 menu,UInt32 item)
  74. {
  75.     Menu    *mobj;
  76.     
  77.     
  78.     mobj = DoGetMenu(menu);
  79.     if (mobj != NULL)
  80.         HandleSelect(mobj,item);
  81.     
  82.     ::HiliteMenu(0);
  83. }
  84.  
  85.  
  86.  
  87.  
  88.  
  89. void BaseMenuManager::DoWindowNotice(Window *window,Boolean isBeingAdded)
  90. {
  91.     BaseMenuObject    *mobj;
  92.     
  93.     
  94.     mobj = fMenuList.GetFirst();
  95.     while(mobj != NULL)
  96.     {
  97.         HandleWindowNotice(mobj->fMenuObject,window,isBeingAdded);
  98.         mobj = mobj->next;
  99.     }
  100. }
  101.  
  102.  
  103.  
  104.  
  105.  
  106. void BaseMenuManager::DoWindowActivation(Window *window,Boolean isBeingActivated)
  107. {
  108.     BaseMenuObject    *mobj;
  109.     
  110.     
  111.     mobj = fMenuList.GetFirst();
  112.     while(mobj != NULL)
  113.     {
  114.         HandleWindowActivation(mobj->fMenuObject,window,isBeingActivated);
  115.         mobj = mobj->next;
  116.     }
  117. }
  118.  
  119.  
  120.  
  121.  
  122.  
  123. Menu *BaseMenuManager::DoGetMenu(UInt32 menuID)
  124. {
  125.     return HandleGetMenu(menuID);
  126. }
  127.  
  128.  
  129. #pragma mark -
  130.  
  131.  
  132. void BaseMenuManager::HandleAddMenu(Menu *menu)
  133. {
  134.     BaseMenuObject    *obj;
  135.     
  136.     
  137.     obj = new BaseMenuObject;
  138.     if (obj != NULL)
  139.     {
  140.         obj->fMenuID = menu->fMenu[0]->menuID;
  141.         obj->fMenuObject = menu;
  142.         fMenuList.Append(obj);
  143.         ::InsertMenu(menu->fMenu,0);
  144.     }
  145. }
  146.  
  147.  
  148.  
  149.  
  150.  
  151. void BaseMenuManager::HandleMenuUpdate(Menu *menu)
  152. {
  153.     menu->DoUpdate();
  154. }
  155.  
  156.  
  157.  
  158.  
  159.  
  160. void BaseMenuManager::HandleSelect(Menu *menu,UInt32 item)
  161. {
  162.     menu->DoSelect(item);
  163. }
  164.  
  165.  
  166.  
  167.  
  168.  
  169. void BaseMenuManager::HandleWindowNotice(Menu *menu,Window *window,Boolean isBeingAdded)
  170. {
  171.     menu->DoWindowNotice(window,isBeingAdded);
  172. }
  173.  
  174.  
  175.  
  176.  
  177.  
  178. void BaseMenuManager::HandleWindowActivation(Menu *menu,Window *window,Boolean isBeingActivated)
  179. {
  180.     menu->DoWindowActivation(window,isBeingActivated);
  181. }
  182.  
  183.  
  184.  
  185.  
  186.  
  187. Menu *BaseMenuManager::HandleGetMenu(UInt32 menuID)
  188. {
  189.     BaseMenuObject    *obj;
  190.     
  191.     
  192.     obj = fMenuList.GetFirst();
  193.     while(obj && (obj->fMenuID != menuID))
  194.         obj = obj->next;
  195.     
  196.     return obj ? obj->fMenuObject : NULL;
  197. }
  198.